package thread.day1;

/**
 * thread类的常用方法
 * 1.start()
 * 2.run()
 * 3.Thread.currentThread() 静态方法，返回当前执行代码的线程
 * 4.getName()/setName() 修改线程名称
 * 5.yield() 释放当前CPU当此的执行权，可以再次抢占
 * 6.join() 在线程a中调用线程b的join()方法，线程a进入阻塞状态，知道线程b执行完毕，才能执行线程a
 * 7.stop()  强制结束，废弃，不推荐
 * 8.sleep() 线程睡眠，阻塞状态，释放锁并且不争抢锁
 * 9.isAlive() 线程是否存活
 * 10.getPriority()/setPriority()  获取/设置线程的优先级
 * 注意：优先级高只是抢占的概率高，也可能抢不到
 * 11.线程的通信
 *
 * @author wx
 * @create 2019-11-27 19:42
 */
public class ThreadMethods {
    public static void main(String[] args) {
        ThreadC t = new ThreadC();
        t.start();

        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println("this.getName() = " + Thread.currentThread().getName() + " i:" + i);
            }
//            if (i % 3 == 0) {
////                System.out.println("i = " + i);
//                System.out.println("main yeild!");
//                Thread.currentThread().yield();
//            }
            if (i == 50) {
                try {
                    System.out.println("t.isAlive() = " + t.isAlive());


                    t.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


class ThreadC extends Thread {
    @Override
    public void run() {
        int i = 0;
        for (i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println("this.getName() = " + this.getName() + i);
            }

        }
        if (i == 50) {
//            this.setName("thread-newName");
//            System.out.println("rename Thread!");


        }
    }
}